4f0c90bdde007522e2bde406abf0cc604b7e052d,contrib/dtest/src/main/java/org/jboss/byteman/contrib/dtest/Instrumentor.java,Instrumentor,injectFault,#Class#String#Class#Object[]#,300
Before Change
}
actionBuilder.append(")"+"\n");
RuleBuilder ruleBuilder = new RuleBuilder(ruleName);
if(isInterface(className)) {
ruleBuilder.onInterface(className);
} else {
ruleBuilder.onClass(className);
}
ruleBuilder.inMethod(methodName).atEntry();
ruleBuilder.usingHelper(BytemanTestHelper.class);
ruleBuilder.whenTrue().doAction(actionBuilder.toString());
installScript("fault"+className+"."+methodName, ruleBuilder.toString());
}
/**
After Change
public void injectFault(Class clazz, String methodName, Class<? extends Throwable> fault, Object[] faultArgs) throws Exception
{
String className = clazz.getCanonicalName();
String ruleName = this.getClass().getCanonicalName()+"_"+className+"_"+methodName+"_faultinjection";
StringBuilder actionBuilder = new StringBuilder();
actionBuilder.append("setTriggering(false), debug(\"firing "+ruleName+"\", $0), ");
actionBuilder.append("throw new "+fault.getCanonicalName()+"(");
if(faultArgs != null) {
for(int i = 0; i < faultArgs.length; i++) {
String argClassName = faultArgs[i].getClass().getCanonicalName();
boolean requireQuotes = true;
if(argClassName.startsWith("java.lang.") && !argClassName.equals("java.lang.String")) {
requireQuotes = false;
}
if(requireQuotes) {
actionBuilder.append("\"");
}
actionBuilder.append(faultArgs[i]);
if(requireQuotes) {
actionBuilder.append("\"");
}
if(i != faultArgs.length-1) {
actionBuilder.append(", ");
}
}
}
actionBuilder.append(")"+"\n");
RuleConstructor.ClassClause builderClassClause = RuleConstructor.createRule(ruleName);
RuleConstructor.MethodClause builderMethodClause =
isInterface(className) ? builderClassClause.onInterface(className) : builderClassClause.onClass(className);
RuleConstructor builder = builderMethodClause
.inMethod(methodName)
.atEntry()
.helper(helperClass)
.ifTrue()
.doAction(actionBuilder.toString());
installScript("fault"+className+"."+methodName, builder.build());
}
/**